package ar.com.sectorwine.services;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import ar.com.sectorwine.dao.EmpresasDAO;
import ar.com.sectorwine.dao.UsuariosDAO;
import ar.com.sectorwine.entities.Empresa;
import ar.com.sectorwine.entities.Stock;
import ar.com.sectorwine.entities.Users;

@Service
@Transactional(propagation = Propagation.MANDATORY)
public class EmpresasServiceImpl implements EmpresasService {

	@Autowired
	EmpresasDAO empresasDAO;
	@Autowired
	UsuariosDAO usuariosDAO;

	private static final Logger logger = LoggerFactory
			.getLogger(EmpresasServiceImpl.class);

	@Override
	public void crearEmpresa(Empresa empresa, Users user) {
		empresa.setFechaCreacion(new Date());
		empresa.setProductos(new ArrayList<Stock>());

		empresasDAO.save(empresa);
		user.getPerfilUsuario().setEmpresa(empresa);
		usuariosDAO.update(user);
		logger.info("EMPRESA CREADA");
	}

	@Override
	public List<Empresa> getEmpresas() {
		List<Empresa> listaEmpresas = empresasDAO.findAll();
		logger.info("EMPRESAS ENCONTRADAS");
		return listaEmpresas;
	}

	public Empresa getEmpresa(String id) {
		Long idEmpresa = Long.parseLong(id);
		Empresa empresa = empresasDAO.findOne(idEmpresa);
		logger.info("EMPRESA ENCONTRADA");
		return empresa;
	}

	@Override
	public void modificarEmpresa(Empresa empresa) {
		Empresa oldEmpresa = empresasDAO.findOne(empresa.getId());
		
		oldEmpresa.setActividadPrincipal(empresa.getActividadPrincipal());
		oldEmpresa.setActividadSecundaria(empresa.getActividadSecundaria());
		oldEmpresa.setBaja(empresa.getBaja());
		oldEmpresa.setCorreoElectronico(empresa.getCorreoElectronico());
		oldEmpresa.setCuit(empresa.getCuit());
		oldEmpresa.setDescripcion(empresa.getDescripcion());
		oldEmpresa.setDomicilioFiscal(empresa.getDomicilioFiscal());
		oldEmpresa.setDomicilioReal(empresa.getDomicilioReal());
		oldEmpresa.setRazonSocial(empresa.getRazonSocial());
		oldEmpresa.setSitioWeb(empresa.getSitioWeb());
		oldEmpresa.setTelefono(empresa.getTelefono());
		
		empresasDAO.update(oldEmpresa);
		logger.info("EMPRESA MODIFICADA");
	}

	@Override
	public boolean bajaEmpresa(String id) {
		try {
			Long idEmpresa = Long.parseLong(id);
			Empresa empresaMod = empresasDAO.findOne(idEmpresa);
			empresaMod.setBaja(true);
			empresasDAO.update(empresaMod);
			logger.info("EMPRESA DADA DE BAJA");
			return true;
		} catch (Exception e) {
			return false;
		}
	}

}
